﻿''' <summary>
''' Generieke basisscherm.
''' Bevat code voor het zetten van de titel en voor het bewaren.
''' In de Designer-code worden ook een aantal default property's (font, icoon, KeyPreview en ShowInTaskBar) ingesteld.
''' </summary>
Public Class BaseForm

    Protected Overrides Sub OnLoad(ByVal e As EventArgs)
        MyBase.OnLoad(e)
        If (Not Me.DesignMode) Then Me.Icon = My.Resources.FairShop
        If (Utility.IsOefenVersie() And Not Me.Text.EndsWith("oefenversie")) Then
            Me.Text = Me.Text & " - oefenversie"
        End If
    End Sub

    ''' <summary>
    ''' Generieke bewaarfunctie voor een scherm met een grid voor het wijzigen van één tabel.
    ''' </summary>
    ''' <param name="table">Tabel die moet bewaard worden</param>
    ''' <param name="recordNaam">Naam van een record, bijvoorbeeld "winkelier(s)" of "categorie(ën)"</param>
    ''' <param name="kanBewaren">Boolean die na het uitvoeren kan gebruikt worden om te bepalen of de knop "Bewaren" nog enabled mag zijn.</param>
    ''' <returns>Aantal bijgewerkte records</returns>
    Protected Function Bewaar(ByVal table As DataTable, ByVal recordNaam As String, ByRef kanBewaren As Boolean) As Integer
        Cursor = Cursors.WaitCursor
        Try
            If (Not Me.Validate()) Then Return 0 ' valideert en werkt de dataset bij

            Dim aantalToegevoegd As Integer = 0
            Dim aantalVerwijderd As Integer = 0
            Dim aantalGewijzigd As Integer = 0

            For i As Integer = table.Rows.Count - 1 To 0 Step -1
                ' achterstevoren omdat aantal items kan veranderen tijdens de lus
                Dim row As DataRow = table.Rows(i)
                Select Case row.RowState
                    Case DataRowState.Added
                        aantalToegevoegd += 1
                        Dal.Toevoegen(row)
                    Case DataRowState.Deleted
                        aantalVerwijderd += 1
                    Case DataRowState.Modified
                        aantalGewijzigd += 1
                End Select
            Next
            Dim aantal As Integer = Dal.Bijwerken(table)
            If (aantal = 0) Then
                ' TODO: niet waterdicht als er meerdere records gewijzigd zijn
                aantalVerwijderd = 0
                aantalGewijzigd = 0
            End If
            Dim msg As String = String.Format("{0} {1} werd(en) bijgewerkt.{2}{3} {1} werd(en) toegevoegd.{4}{5} {1} werd(en) verwijderd.", _
                aantalGewijzigd, recordNaam, Environment.NewLine, aantalToegevoegd, Environment.NewLine, aantalVerwijderd)
            MessageBox.Show(msg, "Bewaren", MessageBoxButtons.OK, MessageBoxIcon.Information)
            kanBewaren = False
            Return aantal + aantalToegevoegd
        Catch ex As Exception
            MsgBox.ShowError("Fout tijdens het bewaren")
            log.WriteError("BaseForm.Bewaar " & table.TableName, ex)
        Finally
            Cursor = Cursors.Default
        End Try
        Return 0
    End Function

End Class